/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2008，所有权利保留。
 * 
 * 项目名：	rumba-web
 * 文件名：	TitleItem.java
 * 模块说明：	
 * 修改历史：
 * Jul 11, 2008 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.panel;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;

/**
 * 标题项目，表示一个标题可被加入到{@link RTitlePanel}中。
 * 
 * @author lxm
 * 
 */
public class RTitleItem extends Composite {

  private static final String STYLENAME = "rb-TitlePanelItem";
  private static final String DEPENDENT_STYLENAME_HOT = "hot";

  /**
   * 创建一个标题项目对象。
   */
  public RTitleItem() {
    super();
    drawSelf();
  }

  /**
   * 创建一个标题项目对象。
   * 
   * @param caption
   *          指定标题项显示的文字。
   */
  public RTitleItem(String caption) {
    super();
    this.caption = caption;
    drawSelf();
  }

  /**
   * 创建一个标题项目对象。
   * 
   * @param caption
   *          指定标题项显示的文字。
   * @param linkToken
   *          指定链接Token，当操作者点击该标题后将导致触发模块内跳转。
   */
  public RTitleItem(String caption, String linkToken) {
    super();
    this.caption = caption;
    this.linkToken = linkToken;
    drawSelf();
  }

  /** 标题项显示的文字。 */
  public String getCaption() {
    return caption;
  }

  public void setCaption(String caption) {
    this.caption = caption;
    html.setHTML(caption);
  }

  /** 当操作者点击该标题后将导致触发模块内的链接Token。 */
  public String getLinkToken() {
    return linkToken;
  }

  public void setLinkToken(String linkToken) {
    this.linkToken = linkToken;
    html.setTitle(linkToken);
  }

  private String caption;
  private String linkToken;

  private HTML html;

  private void drawSelf() {
    // caption后面加一个&nbsp;的原因是当caption为全中文时，会在下方产生多余的空隙，而包含如果任意半角字符，
    // 则没有这种情况，因为加一个&nbsp;，即一个半角的空格。
    html = new HTML(caption + "&nbsp;");
    DOM.setStyleAttribute(html.getElement(), "cursor", "hand");
    html.setStyleName(STYLENAME);
    Handler handler = new Handler();
    html.addClickHandler(handler);
    html.addMouseOverHandler(handler);
    html.addMouseOutHandler(handler);
    //    html.setTitle(linkToken);
    initWidget(html);
  }

  /**
   * 自身的事件处理
   * 
   * @author LiQi
   * 
   */
  private class Handler implements ClickHandler, MouseOverHandler, MouseOutHandler {

    public void onClick(ClickEvent event) {
      if (linkToken != null)
        History.newItem(linkToken);
    }

    public void onMouseOver(MouseOverEvent event) {
      if (linkToken == null)
        return;
      html.addStyleDependentName(DEPENDENT_STYLENAME_HOT);
    }

    public void onMouseOut(MouseOutEvent event) {
      if (linkToken == null)
        return;
      html.removeStyleDependentName(DEPENDENT_STYLENAME_HOT);
    }
  }
}
